Exercice réalisé ci-dessous :


Ce TP concerne le traitement et l’analyse d’images. Vous avez à disposition le fichier classImage.php. Cette classe a été réalisée spécialement pour vous permettre d’expérimenter des algorithmes simples sur des images.


Fabriquez une image de 100x100 entièrement orange (pas rouge, pas jaune, pas verte– orange).

    
        
            <?php
            include "classImage.php";

            $monImage1 = new Image(100, 100);
            $orange = imagecolorallocate($monImage1->getImage(), 255, 165, 0);
            for ($i = 0; $i < 100; $i++) {
                for ($j = 0; $j < 100; $j++) {
                    $monImage1->changeCouleurImageXY($i, $j, 255, 165, 0);
                }
            }

            $monImage1->afficherImage();
            imagedestroy($monImage1->getImage());
            ?>
        

Cliquez ici pour voir le résultat de cet exercice.


Fabriquez une image de 200x200 qui contient des pixels de couleurs aléatoires (rand(0,255) retourne un nombre compris entre 0 et 255).

    
        
            <?php
            include "classImage.php";
            
            $monImage = new Image(200, 200);
            
            for ($i = 0; $i < 200; $i++) {
                for ($j = 0; $j < 200; $j++) {
                    $r = rand(0, 255); 
                    $g = rand(0, 255); 
                    $b = rand(0, 255); 
            
                    $monImage->changeCouleurImageXY($i, $j, $r, $g, $b);
                }
            }
            
            $monImage->afficherImage();
            
            imagedestroy($monImage->getImage());
            ?>
        

Cliquez ici pour voir le résultat de cet exercice.


Fabriquez une image avec des bandes horizontales qui couvre toutes les couleurs saturées du spectre (rouge, jaune, vert, bleu, magenta).

    
        
            <?php
            include "classImage.php";
            
            $largeur = 500;
            $hauteur = 100;
            $monImage = new Image($largeur, $hauteur);
            
            $bandes_couleurs = array(
                imagecolorallocate($monImage->getImage(), 255, 0, 0),  
                imagecolorallocate($monImage->getImage(), 255, 255, 0),  
                imagecolorallocate($monImage->getImage(), 0, 255, 0),    
                imagecolorallocate($monImage->getImage(), 0, 0, 255),    
                imagecolorallocate($monImage->getImage(), 255, 0, 255)   
            );
            
            for ($i = 0; $i < $largeur; $i++) {
                for ($j = 0; $j < $hauteur; $j++) {
                    $bande_index = intval($i / ($largeur / count($bandes_couleurs)));
                    imagesetpixel($monImage->getImage(), $i, $j, $bandes_couleurs[$bande_index]);
                }
            }
            
            $monImage->afficherImage();
            
            imagedestroy($monImage->getImage());
            ?gt;
        

Cliquez ici pour voir le résultat de cet exercice.


Trouver une image de votre choix en négatif (vous trouverez votre bonheur sur google image). Coder un algorithme qui permet d’afficher cette image avec les bonnes couleurs.

    
        
            <?php
            include "classImage.php";
            
            $monImage = new Image("negative.jpg");
            
            for ($i = 0; $i < $monImage->getWidth(); $i++) {
                for ($j = 0; $j < $monImage->getHeight(); $j++) {
                    $r = $monImage->getRougeImageXY($i, $j);
                    $g = $monImage->getVertImageXY($i, $j);
                    $b = $monImage->getBleuImageXY($i, $j);
                    
                    $r_negatif = 255 - $r;
                    $g_negatif = 255 - $g;
                    $b_negatif = 255 - $b;
            
                    $monImage->changeCouleurImageXY($i, $j, $r_negatif, $g_negatif, $b_negatif);
                }
            }
            
            $monImage->afficherImage();
            
            imagedestroy($monImage->getImage());
            ?>
        

Cliquez ici pour voir le résultat de cet exercice sachant que l'image originale est

image en négatif


L’image "Vichy_Labo.jpg" est à l’envers. Coder un algorithme qui permet d’afficher cette image à l’endroit.

    
        
            <?php
            include "classImage.php";
            
            $monImage = new Image("Vichy_Labo.jpg");
            
            imageflip($monImage->getImage(), IMG_FLIP_HORIZONTAL);
            
            $monImage->afficherImage();
            
            imagedestroy($monImage->getImage());
            ?>
        

Cliquez ici pour voir le résultat de cet exercice.


Vous disposez de 2 images : carte_droite et carte_gauche. Faites en sorte d’afficher les deux cartes sur la même image. (fait sans classImage)

    
        
            <?php
            $chemin_image1 = 'carte_gauche.jpg';
            $chemin_image2 = 'carte_droite.jpg';
            
            $image1 = imagecreatefromjpeg($chemin_image1);
            $image2 = imagecreatefromjpeg($chemin_image2);
            
            $largeur_image = imagesx($image1);
            $hauteur_image = imagesy($image1);
            
            $image_fusionnee = imagecreatetruecolor($largeur_image, $hauteur_image);
            
            $seuil_blanc = 30;
            
            function estBlanc($r, $v, $b, $seuil) {
                return ($r > 255 - $seuil && $v > 255 - $seuil && $b > 255 - $seuil);
            }
            
            for ($x = 0; $x < $largeur_image; $x++) {
                for ($y = 0; $y < $hauteur_image; $y++) {
                    $couleur_image1 = imagecolorat($image1, $x, $y);
                    $couleur_image2 = imagecolorat($image2, $x, $y);
            
                    if (!estBlanc(($couleur_image1 >> 16) & 0xFF, ($couleur_image1 >> 8) & 0xFF, $couleur_image1 & 0xFF, $seuil_blanc)) {
                        $couleur_fusionnee = $couleur_image1;
                    } elseif (!estBlanc(($couleur_image2 >> 16) & 0xFF, ($couleur_image2 >> 8) & 0xFF, $couleur_image2 & 0xFF, $seuil_blanc)) {
                        $couleur_fusionnee = $couleur_image2;
                    } else {
                        $couleur_fusionnee = imagecolorallocate($image_fusionnee, 255, 255, 255);
                    }
            
                    imagesetpixel($image_fusionnee, $x, $y, $couleur_fusionnee);
                }
            }
            
            header('Content-Type: image/jpeg');
            imagejpeg($image_fusionnee);
            
            imagedestroy($image1);
            imagedestroy($image2);
            imagedestroy($image_fusionnee);
            ?>
        

Cliquez ici pour voir le résultat de cet exercice.


Fabriquez un menu qui lit une image de votre choix en couleur (vous trouverez votre bonheur sur google image). Coder un algorithme qui permet d’afficher cette image en niveaux de gris. Colorisez cette image noir et blanc en rouge. En fait, on veut voir cette image comme à travers un filtre rouge.

     
         
            <!DOCTYPE html>
            <html lang="fr">
            <head>
                <meta charset="UTF-8">
                <meta name="viewport" content="width=device-width, initial-scale=1.0">
                <title>Conversion d'image en niveaux de gris ou de rouge</title>
                <link rel="stylesheet" href="menustyle.css">
                <link href='https://unpkg.com/boxicons@2.1.4/css/boxicons.min.css' rel='stylesheet'>
            </head>
            <body>
                <h1>Conversion d'image en niveaux de gris ou de rouge</h1>
                <form action="" method="post" enctype="multipart/form-data">
                    <label for="image"><i class='bx bx-horizontal-right'></i> Sélectionnez une image <i class='bx bx-horizontal-left' ></i></label>
                    <input type="file" name="image" id="image" accept="image/*">
                    <button type="submit" name="submit_grayscale">Convertir en niveaux de gris</button>
                    <button type="submit" name="submit_red">Convertir en niveaux de rouge</button>
                    <button type="submit" name="submit_color">Afficher en couleur</button>
                </form>
            
                <?php
                if (isset($_POST['submit_grayscale']) || isset($_POST['submit_red']) || isset($_POST['submit_color'])) {
                    if (!empty($_FILES['image']['name'])) {
                        $image_temp = $_FILES['image']['tmp_name'];
            
                        $image_info = getimagesize($image_temp);
                        if ($image_info !== false) {
            
                            $image_source = imagecreatefromstring(file_get_contents($image_temp));
            
                            if (isset($_POST['submit_grayscale'])) {
                                imagefilter($image_source, IMG_FILTER_GRAYSCALE);
                                $filter_name = 'grayscale';
                            } elseif (isset($_POST['submit_red'])) {
                                imagefilter($image_source, IMG_FILTER_COLORIZE, 255, 0, 0);
                                $filter_name = 'red';
                            } elseif (isset($_POST['submit_color'])) {
                                $filter_name = 'color';
                            }
            
                            $temp_file = tempnam(sys_get_temp_dir(), $filter_name . '_');
                            imagejpeg($image_source, $temp_file);
            
                            $web_accessible_path = '/grayscale_images/' . basename($temp_file);
                            $new_path = $_SERVER['DOCUMENT_ROOT'] . $web_accessible_path;
                            if (rename($temp_file, $new_path)) {
                                echo '<h2>Image en niveaux de ' . $filter_name . ' :</h2>';
                                echo '<img src="' . $web_accessible_path . '" alt="Image en niveaux de ' . $filter_name . '">';
                            } else {
                                echo '<p>Une erreur s\'est produite lors de la sauvegarde de l\'image en niveaux de ' . $filter_name . '.</p>';
                            }
            
                            imagedestroy($image_source);
                            if (file_exists($temp_file)) {
                                unlink($temp_file);
                            }
                        } else {
                            echo '<p>Le fichier sélectionné n\'est pas une image valide.</p>';
                        }
                    } else {
                        echo '<p>Veuillez sélectionner une image.</p>';
                    }
                }
                ?>
            </body>
            </html>
         

Cliquez ici pour voir le résultat de cet exercice.